<?php

namespace maotool\core\session;

interface Driver
{

    /**
     * 会话名称
     *
     * @return string
     */
    public function getName();

    /**
     * 会话编号
     *
     * @return string
     */
    public function getId();

    /**
     * 获取缓存
     * @param string $key
     * @param mixed $default
     * @return mixed
     */
    public function get($key, $default = null);

    /**
     * 缓存是否存在
     * @param string $key
     * @return bool
     */
    public function has($key);

    /**
     * 获取并删除缓存
     * @param string $key
     * @param mixed $default
     * @return mixed
     */
    public function pull($key, $default = null);

    /**
     * 设置缓存
     * @param string $key
     * @param mixed $value
     * @param int $seconds
     * @return bool
     */
    public function put($key, $value, $seconds = null);

    /**
     * 替换缓存
     * @param string $key
     * @param mixed $value
     * @param int $seconds
     * @return bool
     */
    public function replace($key, $value, $seconds = null);

    /**
     * 设置不存在的缓存
     * @param string $key
     * @param mixed $value
     * @param int $seconds
     * @return bool
     */
    public function add($key, $value, $seconds = null);

    /**
     * 设置存在的缓存
     * @param string $key
     * @param mixed $value
     * @return bool
     */
    public function update($key, $value);

    /**
     * 递增缓存
     * @param string $key
     * @param int $value
     * @return int|bool
     */
    public function increment($key, $value = 1);

    /**
     * 递减缓存
     * @param string $key
     * @param int $value
     * @return int|bool
     */
    public function decrement($key, $value = 1);

    /**
     * 删除缓存
     * @param string $key
     * @return bool
     */
    public function remove($key);

    /**
     * 清理过期缓存
     * @return bool
     */
    public function expire();

    /**
     * 清空缓存
     * @return bool
     */
    public function clear();

    /**
     * 启动会话，从处理程序读取数据。
     *
     * @return bool
     */
    public function start();

    /**
     * 获取所有会话数据
     *
     * @return array
     */
    public function all();

    /**
     * 将会话数据保存到存储
     *
     * @return bool
     */
    public function save();

    /**
     * 检查是否存在密钥
     *
     * @param  string|array  $key
     * @return bool
     */
    public function exists($key);

    /**
     * 闪存数据
     * @return mixed
     */
    public function flash();

    /**
     * 获取CSRF代币值
     *
     * @return string
     */
    public function token();

}